#题目二：验证回文   只验证数字字母  字母不区分大小写
st="ghk75jjhfJGBJ"
st1="a12421)(A"
st2="1"
def huiwen1(st):     ##方法一：用正则先进行过滤(只得到输入的数字字母)，再根据反转前后的列表是否相等进行比较
    import re
    a=re.findall(r"[0-9a-zA-Z]",st)    ##得到只有数字字母的内容，以数组的形式保存
    a1=[i.upper() for i in a if isinstance(i,str)]     ##将小写字母转换为大写字母
    content=''.join(a)
    if a1==list(reversed(a1)):    #判断列表反转后是否相同
        print(f"{content}是回文")
    else:
        print(f"{content}不是回文")
# huiwen1(st1)
def huiwen2(st):     ##方法一：用正则先进行过滤(只得到输入的数字字母)，再根据反转前后的列表是否相等进行比较
    import re
    a=re.findall(r"[0-9a-zA-Z]",st)    ##得到只有数字字母的内容，以数组的形式保存
    print(a)
    a1=[i.upper() for i in a if isinstance(i,str)]     ##将小写字母转换为大写字母
    print(a1)
    for i in range(len(a1)//2):      ##遍历数组的一半，用第一个和最后一个进行对比，依此类推
        if a1[i]!=a1[len(a1)-1-i]:
            return False
    return True
# print(huiwen2(st1))

def huiwen_r(st):     ###采用递归的思想，每次都是比较第一个和最后一个元素，看是否相等，不等则返回False，相等则把第一个元素和最后一个元素切片，用切割之后的元素去进行重复的操作
    if len(st)==1 or len(st)==0:
        return True
    elif st[0]!=st[-1]:
        return False
    else:
        huiwen_r(st[1:-1])
    return huiwen_r(st[1:-1])
def huiwen3(st):
    import re
    a = re.findall(r"[0-9a-zA-Z]", st)  ##得到只有数字字母的内容，以数组的形式保存
    a1 = [i.upper() for i in a if isinstance(i, str)]  ##将小写字母转换为大写字母
    str1="".join(a1)      #将列表转换为字符串
    ans = huiwen_r(str1)
    return ans
#print(huiwen3(st1))


########################################################################################
#题目三：输出最小回文串  例：noonno  --》noon   noo  ==>noon   abc==>abcba
def min_huiwen(st):
    def get_maxstr(st):
        res=""    ###用单个字符串保存结果，节省内存开销
        pos=[0,0]
        for i in range(len(st)+1):
            for j in range(len(st)+1,-1,-1):
                if st[i:j]==st[i:j][::-1] and j-i>1:   ##找到最大回文子串
                    #res.append(st[i:j])
                    if len(st[i:j])>len(res):    ##如果字符串的长度比现有回文子串的长，则替换，否则不进行替换
                        res=st[i:j]
                        pos=[i,j]    ###返回最大回文子串的下标
        #return sorted(res,key=lambda x:len(x))[-1]
        return res,pos
    maxstr,maxpos=get_maxstr(st)
    left_str=st[0:maxpos[0]]   ##得到最大回文子串左边的内容
    right_str=st[maxpos[1]:]   ##得到右边的内容
    maxstr=left_str+right_str[::-1]+maxstr+right_str+left_str[::-1]
    return maxstr

# print(min_huiwen("gnnda"))
# print(min_huiwen("abcdecba"))
# print(min_huiwen("abc"))

print(2+"5")